package ar.uba.fi.algo3.algoTank.Objetos.Tanques;

import ar.uba.fi.algo3.algoTank.Objetos.Direccion;
import ar.uba.fi.algo3.algoTank.Objetos.Direccionador;
import ar.uba.fi.algo3.algoTank.Objetos.Posicion;
import ar.uba.fi.algo3.algoTank.Objetos.Proyectil;
import ar.uba.fi.algo3.algoTank.Objetos.Territorio;
import ar.uba.fi.algo3.algoTank.Objetos.Ubicacion;

public abstract class TanqueEnemigo extends Tanque {


	private static final long serialVersionUID = 1L;
	
	protected int puntosPorDestruccion;
	private Ubicacion objetivo; //la ubicacion hacia donde se mueve
	protected Direccionador direccionador;
		
	public TanqueEnemigo() {
		super();
		this.frecuenciaDeDisparo = 30;
	}
	
	public TanqueEnemigo(Posicion posicion,Territorio territorio){
		super(posicion, territorio);
		this.frecuenciaDeDisparo = 30;
	}
	
	public int getPuntosPorDestruccion(){
		return puntosPorDestruccion;
	}

	public void setPuntosPorDestruccion(int num) {
		this.puntosPorDestruccion = num;
	}
	
	public void setObjetivo(Ubicacion ubicacion){
		this.objetivo = ubicacion;
	}
	
	public Ubicacion getObjetivo(Ubicacion ubicacion){
		return this.objetivo;
	}
	
	public void vivir(){
		//calcula su direccion de acuerdo a la ubicacion de su objetivo
		Direccion direccion = direccionador.calcularDireccion(this.ubicacion,this.objetivo);
		this.movimiento.setDireccion(direccion);
				
		//realiza el movimiento
		this.calcularProximaUbicacion();
		if (territorio.ubicacionLibre(proximaUbicacion))
			this.mover();		
		//realiza los disparos
		this.tiempoDesdeUltimoDisparo += deltaTiempo;
		
		if (puedeDisparar()) {
			this.disparar();
		}
		
	}
	
	public void mover() {
		this.setUbicacion(this.getProximaUbicacion());
		//despues de moverse recalcula su direccion de acuerdo a la
		//ubicacion de su objetivo
	}
		
	public void disparar(){
		Proyectil nuevoProy = armaActual.disparar(this);
		nuevoProy.setTerritorio(territorio);
		nuevoProy.setDuenio(this);
		territorio.addObjeto(nuevoProy);
		nuevoProy.mover();
		nuevoProy.mover();
		this.tiempoDesdeUltimoDisparo = 0;
	}
	
	public boolean interactuableConAlgoTank() {
		return true;
	}
			
	public void interactuarConAlgoTank(AlgoTank tanqueJugador) {
		//si choca con algotank ambos tanques mueren
		tanqueJugador.daniarse(50);
		this.morir();
		
	}

	
}
